<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<link href="../style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>mod_authz_host － Apache 2.2 中文手册 [金步国]</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head>
<body><div id="page-header">
<p class="menu"><a href="index.html">模块索引</a> | <a href="directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="index.html"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path"><a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">HTTP Server</a> &gt; <a href="https://httpd.apache.org/docs/">文档</a> &gt; <a href="../index.html">版本2.2</a> &gt; <a href="index.html">模块</a></div>

<div id="translation-info">　　 <a href="../translator_announcement.html#thanks">致谢</a> | 本篇译者：<a href="../../../index.html">金步国</a>(<a href="../../../index.html">作品集</a>) | 本页最后更新：2006年10月20日</div>
<div id="page-content"><div id="preamble"><h1>Apache模块 mod_authz_host</h1>

<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="module">
<tr><th><a href="module-dict.html#Description">说明</a></th><td>提供基于主机名、IP地址、请求特征的访问控制</td></tr>
<tr><th><a href="module-dict.html#Status">状态</a></th><td>基本(B)</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">模块名</a></th><td>authz_host_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">源文件</a></th><td>mod_authz_host.c</td></tr>
<tr><th><a href="module-dict.html#Compatibility">兼容性</a></th><td>仅在 Apache 2.1 及以后的版本中可用</td></tr>
</table>
<h3>概述</h3>

    <p><code class="module"><a href="mod_authz_host.html">mod_authz_host</a></code>提供的指令用在<code class="directive"><a href="core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="core.html#files">&lt;Files&gt;</a></code>, <code class="directive"><a href="core.html#location">&lt;Location&gt;</a></code>段中，也用于<code><a href="core.html#accessfilename">.htaccess</a></code>文件中控制对服务器特定部分的访问。只要能在<a href="../env.html">环境变量</a>中捕获到主机名、IP地址或其他的客户端请求特征，就可以基于这些特征对访问进行控制。<code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>和<code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>指令用于指出允许哪些客户及不允许哪些客户访问服务器，而<code class="directive"><a href="mod_authz_host.html#order">Order</a></code>指令设置默认的访问状态并配置<code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>和<code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>指令怎样相互作用。</p>

    <p>基于主机的访问控制和基于口令的身份验证两套机制可以同时实现。在这种情况下，<code class="directive"><a href="core.html#satisfy">Satisfy</a></code>指令用来决定两套机制如何相互作用。</p>

    <p>一般来说，访问控制指令适用于所有的访问方法(<code>GET</code>, <code>PUT</code>, <code>POST</code>等)。在多数情况下这是一个被期望的特性。但是，只限制某些方法而对其他方法不加限制也是可能的：通过把指令放到一个<code class="directive"><a href="core.html#limit">&lt;Limit&gt;</a></code>段中即可。</p>
</div>
<div class="top"><a href="mod_authz_host.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Allow" id="Allow">Allow</a> <a name="allow" id="allow">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>控制哪些主机能够访问服务器的该区域</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code> Allow from all|<var>host</var>|env=<var>env-variable</var> [<var>host</var>|env=<var>env-variable</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>Limit</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>基本(B)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_authz_host</td></tr>
</table>
    <p><code class="directive">Allow</code>指令控制哪些主机可以访问服务器的该区域。可以根据主机名、IP地址、 IP地址范围或其他环境变量中捕获的客户端请求特性进行控制。</p>

    <p>这个指令的第一个参数总是"<code>from</code>"，随后的参数可以有三种不同形式：如果指定"<code>Allow from all</code>"，则允许所有主机访问，按照下述<code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>和<code class="directive"><a href="mod_authz_host.html#order">Order</a></code>指令的配置。若要只允许特定的主机或主机群访问服务器，<em>host</em>可以用下面任何一种格式来指定：</p>

    <dl>
      <dt>一个(部分)域名</dt>

      <dd>
      <div class="example"><h3>示例：</h3><p><code>
        Allow from apache.org<br />
        Allow from .net example.edu
      </code></p></div>
      <p>主机名与给定字符串匹配或者以给定字符串结尾的主机允许访问。只有完整的名字组成部分才被匹配，因此上述例子将匹配<code>foo.apache.org</code>但不能匹配<code>fooapache.org</code> 。这样的配置将导致Apache不管<code class="directive"><a href="core.html#hostnamelookups">HostnameLookups</a></code>指令是如何设置的，对一个对客户IP地址都要执行两次DNS查询：一次正查询保证IP没有伪造，一次反查询保证主机名没有伪造。只有两次查询的结果都吻合，并且主机名能够被匹配，访问才被允许。</p></dd>

      <dt>完整的IP地址</dt>

      <dd>
      <div class="example"><h3>示例：</h3><p><code>
        Allow from 10.1.2.3<br />
        Allow from 192.168.1.104 192.168.1.205
      </code></p></div>
      <p>允许拥有这些IP地址的主机进行访问。</p></dd>

      <dt>部分IP地址</dt>

      <dd>
      <div class="example"><h3>示例：</h3><p><code>
        Allow from 10.1<br />
        Allow from 10 172.20 192.168.2
      </code></p></div>
      <p>IP地址的开始1到3个字节，用于子网限制。</p></dd>

      <dt>网络/掩码对</dt>

      <dd>
      <div class="example"><h3>示例：</h3><p><code>
        Allow from 10.1.0.0/255.255.0.0
      </code></p></div>
      <p>一个网络"a.b.c.d"和一个掩码"w.x.y.z"，用于更精确的子网限制。</p></dd>

      <dt>网络/nnn无类别域间路由规格(CIDR specification)</dt>

      <dd>
      <div class="example"><h3>示例：</h3><p><code>
        Allow from 10.1.0.0/16
      </code></p></div>
      <p>同前一种情况相似，除了掩码由nnn个高位字节构成。</p></dd>
    </dl>

    <p>注意以上例子中的后三个匹配完全相同的一组主机。</p>

    <p>IPv6地址和IPv6子网可以像下面这样指定：</p>

    <div class="example"><p><code>
       Allow from 2001:db8::a00:20ff:fea7:ccea<br />
       Allow from 2001:db8::a00:20ff:fea7:ccea/10
    </code></p></div>

    <p><code class="directive">Allow</code>指令的第三种参数格式允许对服务器的访问由<a href="../env.html">环境变量</a>的一个扩展指定。指定"<code>Allow from env=<var>env-variable</var></code>"时，如果环境变量<var>env-variable</var>存在则访问被允许。使用由<code class="module"><a href="mod_setenvif.html">mod_setenvif</a></code>提供的指令，服务器用一种基于客户端请求的弹性方式提供了设置环境变量的能力。因此，这条指令可以用于允许基于像<code>User-Agent</code>(浏览器类型)、<code>Referer</code>或其他HTTP请求头字段的访问。</p>

    <div class="example"><h3>示例：</h3><p><code>
      SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in<br />
      &lt;Directory /docroot&gt;<br />
      <span class="indent">
        Order Deny,Allow<br />
        Deny from all<br />
        Allow from env=let_me_in<br />
      </span>
      &lt;/Directory&gt;
    </code></p></div>

    <p>这种情况下，发送以<code>KnockKnock/2.0</code>开头的用户代理标示的浏览器将被允许访问，而所有其他浏览器将被禁止访问。</p>

</div>
<div class="top"><a href="mod_authz_host.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Deny" id="Deny">Deny</a> <a name="deny" id="deny">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>控制哪些主机被禁止访问服务器</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code> Deny from all|<var>host</var>|env=<var>env-variable</var> [<var>host</var>|env=<var>env-variable</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>Limit</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>基本(B)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_authz_host</td></tr>
</table>
    <p>这条指令允许基于主机名、IP地址或者环境变量限制对服务器的访问。<code class="directive">Deny</code>指令的参数设置和<code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>指令完全相同。</p>

</div>
<div class="top"><a href="mod_authz_host.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="Order" id="Order">Order</a> <a name="order" id="order">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>控制默认的访问状态与<code class="directive">Allow</code>和<code class="directive">Deny</code>指令生效的顺序</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code> Order <var>ordering</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">默认值</a></th><td><code>Order Deny,Allow</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>Limit</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>基本(B)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_authz_host</td></tr>
</table>
    <p><code class="directive">Order</code>指令控制默认的访问状态与<code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>和<code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>指令生效的顺序。<var>Ordering</var>取值范围是以下几种范例之一：</p>

    <dl>
      <dt><code>Deny,Allow</code></dt>

      <dd><code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>指令在<code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>指令之前被评估。<strong>默认允许所有访问</strong>。任何不匹配<code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>指令或者匹配<code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>指令的客户都被允许访问。</dd>

      <dt><code>Allow,Deny</code></dt>

      <dd><code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>指令在<code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>指令之前被评估。<strong>默认拒绝所有访问</strong>。任何不匹配<code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>指令或者匹配<code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>指令的客户都将被禁止访问。</dd>

      <dt><code>Mutual-failure</code></dt>

      <dd>只有出现在<code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>列表并且不出现在<code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>列表中的主机才被允许访问。这种顺序与&quot;<code>Order Allow,Deny</code>&quot;具有同样效果，不赞成使用。</dd>
    </dl>

    <p>关键字只能用逗号分隔；它们之间<strong>不能有空格</strong>。注意在所有情况下每个<code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>和<code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>指令语句都将被评估。</p>

    <p>在下面的例子中，apache.org域中所有主机都允许访问，而其他任何主机的访问都将被拒绝。</p>

    <div class="example"><p><code>
      Order Deny,Allow<br />
      Deny from all<br />
      Allow from apache.org
    </code></p></div>

    <p>下面例子中，apache.org域中所有主机，除了foo.apache.org子域包含的主机被拒绝以外，其他都允许访问。而所有不在apache.org域中的主机都不允许访问，因为默认状态是拒绝对服务器的访问。</p>

    <div class="example"><p><code>
      Order Allow,Deny<br />
      Allow from apache.org<br />
      Deny from foo.apache.org
    </code></p></div>

    <p>另一方面，如果上个例子中的<code class="directive">Order</code>指令改变为"<code>Deny,Allow</code>"，将允许所有主机的访问。这是因为，不管配置文件中指令的实际顺序如何，"<code>Allow from apache.org</code>"指令会最后被评估到并覆盖之前的"<code>Deny from foo.apache.org</code>"。所有不在<code>apache.org</code>域中的主机也允许访问是因为默认状态被改变到了<em>允许</em>。</p>

    <p>即使没有伴随<code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>和<code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>指令，一个<code class="directive">Order</code>指令的存在也会影响到服务器上某一个部分的访问，这是由于它对默认访问状态的影响。例如：</p>

    <div class="example"><p><code>
      &lt;Directory /www&gt;<br />
      <span class="indent">
        Order Allow,Deny<br />
      </span>
      &lt;/Directory&gt;
    </code></p></div>

    <p>这样将会禁止所有对<code>/www</code>目录的访问，因为默认状态将被设置为<em>拒绝</em>。</p>

    <p><code class="directive">Order</code>指令只在服务器配置的每个段内部控制访问指令的处理。这暗示着，例如，一个在<code class="directive"><a href="core.html#location">&lt;Location&gt;</a></code>段中出现的<code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>或<code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>指令总是将会在一个<code class="directive"><a href="core.html#directory">&lt;Directory&gt;</a></code>段或者<code>.htaccess</code>文件中出现的<code class="directive"><a href="mod_authz_host.html#allow">Allow</a></code>或<code class="directive"><a href="mod_authz_host.html#deny">Deny</a></code>指令之后被评估，而不管<code class="directive">Order</code>指令如何设置。要了解配置段落合并的详细信息，参见<a href="../sections.html">配置段</a>文档。</p>

</div>
</div>
<div id="footer">
<p class="apache">本文允许自由的转载、引用、再分发，但必须保留译者署名并注明出处；详见：<a href="../translator_announcement.html#announcement">版权声明</a>。</p>
<p class="menu"><a href="index.html">模块索引</a> | <a href="directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p></div>
</body></html>
